/**
 * 数字排序函数 - 对包含数字类型数据的数组进行排序
 * @param data 要排序的原始数据数组（会被深拷贝，避免修改原数组）
 * @param sortBy 排序依据字段，必须是 'value' 或 'key' 中的一个
 * @param sortState 排序状态：
 *                 0 - 取消排序（返回原始顺序）
 *                 1 - 升序（小 → 大）
 *                 2 - 降序（大 → 小）
 * @returns 排序后的新数组（原数组保持不变）
 */
export const numberSort = (data: any[], sortBy: 'value' | 'key', sortState: number) => {
    // ================ 参数验证 ================
    // 确保 sortBy 参数只能是预定义的合法值
    if (sortBy !== 'value' && sortBy !== 'key') {
        throw new Error("sortBy 参数必须是 'value' 或 'key'");
    }

    // ============ 排序函数配置表 ============
    // 使用映射表定义不同状态对应的排序逻辑
    const sortFunctions = {
        // 升序排序（状态1）
        1: (a: any, b: any) => parseInt(a[sortBy], 10) - parseInt(b[sortBy], 10),
        // 降序排序（状态2）
        2: (a: any, b: any) => parseInt(b[sortBy], 10) - parseInt(a[sortBy], 10),
        // 默认排序（状态0）：保持原顺序
        0: () => 0 // 通过返回0保持数组原始顺序
    };

    // ============ 获取排序函数 ============
    // 选择对应的排序函数，若状态不合法则使用默认
    const sortFunction = sortFunctions[sortState as keyof typeof sortFunctions] || sortFunctions[0];

    // ============ 执行排序 ============
    // 创建数组副本后进行排序（避免修改原数组）
    return [...data].sort(sortFunction);
};
// 字母排序
export const stringSort = (data: any[], sortBy: 'value' | 'key', sortState: number) => {
    // 检查 sortBy 参数是否合法
    if (sortBy !== 'value' && sortBy !== 'key') {
        throw new Error("sortBy 参数必须是 'value' 或 'key'");
    }

    // 定义排序函数映射表
    const sortFunctions: any = {
        1: (a: any, b: any) => a[sortBy].localeCompare(b[sortBy]), // 正序
        2: (a: any, b: any) => b[sortBy].localeCompare(a[sortBy]), // 反序
        0: (a: any, b: any) => 0 // 取消排序，返回原始数组
    };

    // 获取对应的排序函数
    const sortFunction = sortFunctions[sortState] || sortFunctions[0];

    // 返回排序后的数组
    return [...data].sort(sortFunction);
};
// 排序状态函数
export const sortStatev = (value: number) => {
    return value = (value + 1) % 3; // 循环状态：0 -> 1 -> 2 -> 0
}
